/**
 * 绘制三维轨迹管道（模拟飞行路径，每段半径可自定义）
 * @param {Object} viewer - Cesium Viewer 对象，用于在场景中添加实体。
 * @param {Array} positions - 包含每个点的经纬度和高度 [lon1, lat1, alt1, lon2, lat2, alt2, ...]。
 * @param {Array} radii - 每段圆柱的半径数组，长度为 positions.length / 3 - 1。
 * @param {String} color - 管道的颜色。
 */
export function draw3DPipelineTrack(viewer, positions, radii, color = 'YELLOW') {
  const cartesianPositions = [];
  for (let i = 0; i < positions.length; i += 3) {
    const position = Cesium.Cartesian3.fromDegrees(positions[i], positions[i + 1], positions[i + 2]);
    cartesianPositions.push(position);
  }

  // 循环每段轨迹并为每段生成不同的圆柱形
  for (let i = 0; i < cartesianPositions.length - 1; i++) {
    const start = cartesianPositions[i];
    const end = cartesianPositions[i + 1];
    const radius = radii[i]; // 每段的自定义半径

    // 添加实体，绘制不同半径的圆柱管道
    viewer.entities.add({
      polylineVolume: {
        positions: [start, end], // 每段的起点和终点
        shape: computeCircle(radius), // 自定义圆柱横截面形状
        material: Cesium.Color[color.toUpperCase()].withAlpha(0.8), // 管道颜色
        outline: true, // 是否显示轮廓
        outlineColor: Cesium.Color[color.toUpperCase()], // 轮廓颜色
        outlineWidth: 1 // 轮廓线宽
      }
    });
  }
}

/**
 * 生成圆柱的截面形状
 * @param {Number} radius - 圆柱的半径。
 * @returns {Array} - 圆形的点数组，用于生成圆柱截面。
 */
function computeCircle(radius) {
  const positions = [];
  const sides = 360; // 使用360个点来表示圆的截面
  for (let i = 0; i < sides; i++) {
    const radians = (i * Math.PI * 2) / sides;
    positions.push(new Cesium.Cartesian2(Math.cos(radians) * radius, Math.sin(radians) * radius));
  }
  return positions;
}




/**
 * 绘制三维轨迹长方体管道（模拟飞行路径，长宽高可变）
 * @param {Object} viewer - Cesium Viewer 对象，用于在场景中添加实体。
 * @param {Array} positions - 包含每个点的经纬度和高度 [lon1, lat1, alt1, lon2, lat2, alt2, ...]。
 * @param {Array} sizes - 每段的长宽高数组 [[width1, height1], [width2, height2], ...]。
 * @param {String} color - 管道的颜色。
 */
export function draw3DRectangularPipelineTrack(viewer, positions, sizes, color = 'YELLOW') {
  const cartesianPositions = [];
  for (let i = 0; i < positions.length; i += 3) {
    const position = Cesium.Cartesian3.fromDegrees(positions[i], positions[i + 1], positions[i + 2]);
    cartesianPositions.push(position);
  }

  // 循环每段轨迹并为每段生成不同的长方体横截面
  for (let i = 0; i < cartesianPositions.length - 1; i++) {
    const start = cartesianPositions[i];
    const end = cartesianPositions[i + 1];
    const width = sizes[i][0]; // 每段的宽度
    const height = sizes[i][1]; // 每段的高度

    // 添加实体，绘制不同宽高的长方体管道
    viewer.entities.add({
      polylineVolume: {
        positions: [start, end], // 每段的起点和终点
        shape: computeRectangle(width, height), // 自定义横截面形状（长方形）
        material: Cesium.Color[color.toUpperCase()].withAlpha(0.8), // 管道颜色
        outline: true, // 是否显示轮廓
        outlineColor: Cesium.Color[color.toUpperCase()], // 轮廓颜色
        outlineWidth: 1 // 轮廓线宽
      }
    });
  }
}

/**
 * 生成长方体的截面形状
 * @param {Number} width - 横截面的宽度。
 * @param {Number} height - 横截面的高度。
 * @returns {Array} - 组成长方形的 Cartesian2 坐标点数组。
 */
function computeRectangle(width, height) {
  return [
    new Cesium.Cartesian2(-width / 2, -height / 2), // 左下角
    new Cesium.Cartesian2(width / 2, -height / 2), // 右下角
    new Cesium.Cartesian2(width / 2, height / 2), // 右上角
    new Cesium.Cartesian2(-width / 2, height / 2), // 左上角
  ];
}